﻿using MySql.Data.MySqlClient;
using SDE_FIC.Models;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;

namespace SDE_FIC.DAO
{
    public class DiarioDAO
    {
        private DBConnect _db;

        private StringBuilder getPrefix()
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("SELECT ");
            sb.AppendLine("  `iddiario`,");
            sb.AppendLine("  `conteudo`,");
            sb.AppendLine("  `ocorrencia`,");
            sb.AppendLine("  `data`,");
            sb.AppendLine("  `turma_idturma`");
            sb.AppendLine("FROM ");
            sb.AppendLine("  `diario`");

            return sb;

        }

        private Diario loadObject(ref System.Data.DataRow row)
        {
            Diario _d = new Diario();
            FrequenciaDAO frequenciaDAO = new FrequenciaDAO(ref _db);

            _d.Conteudo = (String)row["conteudo"];
            _d.Data = (DateTime)row["data"];
            _d.IdDiario = (int)row["iddiario"];
            _d.UnidadeCurricular = null;

            return _d;
        }

        public Diario diarioByTurma(ref Turma _t, DateTime _d, UnidadeCurricular _uc)
        {
            Diario _diario = null;

            StringBuilder sbSQL = getPrefix();
            sbSQL.AppendLine("WHERE                                 ");
            sbSQL.AppendLine("      turma_idturma = @turma_idturma  ");
            sbSQL.AppendLine("AND   data = @data                    ");
            sbSQL.AppendLine("AND   unidade_curricular_idunidadecurricular = @unidade_curricular_idunidadecurricular;");

            MySql.Data.MySqlClient.MySqlCommand myCMD = new MySql.Data.MySqlClient.MySqlCommand();
            myCMD.Connection = _db.Connection;
            myCMD.CommandText = sbSQL.ToString();
            myCMD.Parameters.Add("@turma_idturma", MySql.Data.MySqlClient.MySqlDbType.Int16, 0).Value = _t.Idturma;
            myCMD.Parameters.Add("@data", MySql.Data.MySqlClient.MySqlDbType.Date, 0).Value = _d;
            myCMD.Parameters.Add("@unidade_curricular_idunidadecurricular", MySql.Data.MySqlClient.MySqlDbType.Int16, 0).Value = _uc.IdUnidadeCurricular;

            DataTable dt = _db.ExecuteQuery(ref myCMD);

            if (dt.Rows.Count == 1)
            {
                DataRow dr = dt.Rows[0];

                _diario = loadObject(ref dr);

            }

            return _diario;
        }

        /// <summary>
        /// Construtor padrão
        /// </summary>
        /// <param name="db">Banco de dados</param>
        public DiarioDAO(ref DBConnect db)
        {
            _db = db;
        }

        public void Insert(ref Diario d)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("INSERT INTO                                  ");
            sb.AppendLine("  `diario`                                   ");
            sb.AppendLine("(                                            ");
            sb.AppendLine("  `conteudo`,                                ");
            sb.AppendLine("  `ocorrencia`,                              ");
            sb.AppendLine("  `data`,                                    ");
            sb.AppendLine("  `turma_idturma`,                           ");
            sb.AppendLine("  `unidade_curricular_idunidadecurricular`)  ");
            sb.AppendLine("VALUE (                                      ");
            sb.AppendLine("  @conteudo,                                 ");
            sb.AppendLine("  @ocorrencia,                               ");
            sb.AppendLine("  @data,                                     ");
            sb.AppendLine("  @turma_idturma,                            ");
            sb.AppendLine("  @unidade_curricular_idunidadecurricular);  ");

            MySqlCommand myCMD = new MySqlCommand();
            myCMD.Transaction = _db.Transaction;
            myCMD.CommandText = sb.ToString();
            myCMD.Parameters.Add("@conteudo", MySqlDbType.Int16, 0).Value = d.Conteudo.ToUpper();
            myCMD.Parameters.Add("@ocorrencia", MySqlDbType.VarChar, 200).Value = d.Ocorrencia.ToUpper(); ;
            myCMD.Parameters.Add("@data", MySqlDbType.Date, 0).Value = d.Data;
            myCMD.Parameters.Add("@turma_idturma", MySqlDbType.Int16, 0).Value = d.Turma.Idturma;
            myCMD.Parameters.Add("@unidade_curricular_idunidadecurricular", MySqlDbType.Int16, 0).Value = d.UnidadeCurricular;

            myCMD.ExecuteNonQuery();

            d.IdDiario = myCMD.LastInsertedId;

            FrequenciaDAO frequenciaDAO = new FrequenciaDAO(ref _db);

            for (int i = 0; i < d.Frequencias.Count; i++)
            {

                Frequencia f = d.Frequencias[i];
                frequenciaDAO.Insert(ref f, d.IdDiario);

            }
        }

        public void Update(ref Diario d)
        {

        }

    }
}